package com.hy;

/**
 * Created With IntelliJ IDEA.
 * Descriptions:1052. 爱生气的书店老板
 * 有一个书店老板，他的书店开了 n 分钟。每分钟都有一些顾客进入这家商店。给定一个长度为 n 的整数数组 customers ，其中 customers[i] 是在第 i 分钟开始时进入商店的顾客数量，
 * 所有这些顾客在第 i 分钟结束后离开。
 * 在某些时候，书店老板会生气。 如果书店老板在第 i 分钟生气，那么 grumpy[i] = 1，否则 grumpy[i] = 0。
 * 当书店老板生气时，那一分钟的顾客就会不满意，若老板不生气则顾客是满意的。
 * 书店老板知道一个秘密技巧，能抑制自己的情绪，可以让自己连续 minutes 分钟不生气，但却只能使用一次。
 * 请你返回 这一天营业下来，最多有多少客户能够感到满意 。
 * User:Mr.Du
 * Date:2024/4/13
 * Time:17:17
 */
public class MaxSatisfied {

    public int maxSatisfied(int[] customers, int[] grumpy, int minutes) {
        int res = 0, cnt = 0, n = grumpy.length;
        for(int i = 0;i < n;i++){
            if(grumpy[i] == 0){
                cnt += customers[i];
            }
        }
        for(int i = 0;i < minutes;i++){
            if(grumpy[i] == 1){
                cnt += customers[i];
            }
        }
        res = Math.max(cnt, res);
        for(int i = minutes;i < n;i++){
            if(grumpy[i] == 1){
                cnt += customers[i];
            }
            if(grumpy[i - minutes] == 1){
                cnt -= customers[i-minutes];
            }
            res = Math.max(cnt, res);
        }
        return res;
    }

    /**
     * 优化后的代码
     * @param customers
     * @param grumpy
     * @param minutes
     * @return
     */
    public int maxSatisfied1(int[] customers, int[] grumpy, int minutes) {
        int sum = 0, cnt = 0, n = customers.length;
        //  统计满意的客户
        for (int i = 0; i < n; i++) sum += customers[i] * (1 - grumpy[i]);
        for (int i = 0; i < minutes; i++) {
            cnt += customers[i] * grumpy[i]; // 统计一段不满意的客户
        }
        int res = cnt;
        // 找不满意最多的一段
        for (int i = minutes; i < n; i++) {
            cnt += customers[i] * grumpy[i] - customers[i - minutes] * grumpy[i - minutes];
            res = Math.max(res, cnt);
        }
        return res + sum;
    }

    public static void main(String[] args) {
        int[] customers = {1,0,1,2,1,1,7,5};
        int[] grumpy = {0,1,0,1,0,1,0,1};
        System.out.println(new MaxSatisfied().maxSatisfied(customers, grumpy, 3));
    }
}
